<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

require_once APPPATH . 'models/m_select.php';

/**
 * Модель выборки страниц меню
 *
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */
class M_Select_Contents extends M_Select {
   
   /**
    * Идентификатор меню
    *
    * @access private
    * @var integer
    */
   var $_id_menu = 0;
   
   /**
    * Конструктор класса
    *
    * @access public
    * @return M_Select_Menu
    */
   function M_Select_Contents() {
      parent::M_Select();
      $this->load->language('select_contents');
      $this->load->helper('element');
      $this->load->model('m_content');
   } // end M_Select_Site_Menu
   
   /**
    * Установка идентификатора меню
    *
    * @access public
    * @param integer $id_menu
    */
   function set_menu($id_menu) {
      $this->_id_menu = $id_menu;
   } // end set_menu
   
   /**
    * Получение идентификатора меню
    *
    * @access public
    * @return integer
    */
   function get_menu() {
      return $this->_id_menu;
   } // end get_menu
   
   /**
    * Инициализация модельки
    *
    * @access public
    */
   function initialize() {
      // Устанавливаем запрос
      $sql = "
         SELECT
            id_content AS id,
            title,
            '' AS url,
            is_default,
            position,
            datetime,
            status,
            id_parent AS id_parent_hidden,
            link AS link_hidden,
            document AS document_hidden,
            document_type AS document_type_hidden,
            0 AS level_hidden
         FROM
            " . $this->db->dbprefix('contents') . "
         WHERE
            status <> 'deleted'
      ";
      if (0 < $this->_id_menu) {
         $sql .= "
            AND id_menu = " . $this->db->escape($this->_id_menu) . "
         ";
      }
      parent::set_sql($sql);
      parent::add_sort('position');
   } // end initialize
   
   /**
    * Установка SQL запроса
    *
    * @access public
    * @param string $table
    */
   function set_sql($sql) {
      
   } // end set_sql
   
   /**
    * Метод генерации limit части sql запроса
    *
    * @access protected
    * @return string
    */
   function _build_limit_statement() {
      return '';
   } // end _build_limit_statement
   
   /**
    * Обработка результата
    *
    * @access protected
    * @param array $result
    */
   function _process_result(&$result) {
      $type = 'page';
      if (!empty($result['link_hidden'])) {
         $type = 'link';
      } elseif (!empty($result['document_hidden'])) {
         $type = 'document';
      }
      $result['title'] = str_repeat($this->lang->line('contents_level_spacer'), $result['level_hidden']) . str_replace('{%type%}', $result['document_type_hidden'], $this->lang->line('contents_' . $type . '_image')) .  $result['title'];
      $result['is_default'] = $this->lang->line('contents_is_default_' . $result['is_default']);
      $result['position'] = create_text('positions[' . $result['id'] . ']', $result['position'], 'size="2" class="i"');
      $result['datetime'] = mdate($this->config->item('datetime_format'), $result['datetime']);
      $this->m_content->set_id($result['id']);
      $url = $this->m_content->get_url();
      $title = $url;
      if (80 < strlen($title)) {
         $title = substr($url, 0, 79) . '&#8230;';
      }
      $result['url'] = str_replace(array('{%link%}', '{%title%}'), array($url, $title), $this->lang->line('contents_link'));
   } // end _process_result
   
   /**
    * Обработка результатов
    *
    * @access protected
    * @param array $results
    */
   function _process_results(&$results) {
      // Лишаем таблицу возможности какой-ни было сортировки
      foreach ($this->_fields as &$filed) {
         $filed['sort'] = false;
      }
      // Строим дерево
      $this->load->helper('tree');
      $tree = array_tree($results, 'id', 'id_parent_hidden');
      $results = collapse_tree($tree, 'level_hidden');
      // Софтверно лимитируем, если нужно
      if (0 < $this->_limit_range) {
         $results = array_slice($results, $this->_start_range, $this->_limit_range);
      }
   } // end _process_results
   
}
